const { app, BrowserWindow, Menu } = require('electron')
const { createMainWindow, showNotification } = require('./tools/window.js')
const useHttpApp = require('./app/app.js')
const log = require('./tools/log.js')
const useHelper = require('./tools/helper.js')

const AutoLaunch = require('electron-auto-launch');

// 数据库
const useSqlite = require('./tools/database.js')


const { startTask, taskConfig, stopTask } = require('./tools/task.js')
// 注册全局stopTask函数，解决循环依赖问题
global.stopTask = stopTask;

// 注册全局MAIN_WINDOW函数，解决循环依赖问题
global.MAIN_WINDOW = null;
// 注册全局PRINT_WINDOW函数，解决循环依赖问题
global.PRINT_WINDOW = null;
// 注册全局PRINT_LOG_WINDOW函数，解决循环依赖问题
global.PRINT_LOG_WINDOW = null;
// 注册全局LOADING_WINDOW函数，解决循环依赖问题
global.LOADING_WINDOW = null;
// 注册全局SETTING_WINDOW函数，解决循环依赖问题
global.SETTING_WINDOW = null;
// 托盘
global.APP_TRAY = null;
// 注册全局db函数，解决循环依赖问题
global.db = null;


process.env['ELECTRON_DISABLE_SECURITY_WARNINGS'] = 'true';

app.allowRendererProcessReuse = false;
app.commandLine.appendSwitch('disable-features', 'BlockInsecurePrivateNetworkRequests,PrivateNetworkAccessSendPreflights');
// app.commandLine.appendSwitch('unsafely-treat-insecure-origin-as-secure', 'http://www.demo.com,http://domain2.com,http://domain3.com');

// 关闭GPU渲染
app.commandLine.appendSwitch('disable-gpu');
app.commandLine.appendSwitch('disable-gpu-compositing');

app.setAppUserModelId('print-yzhkj-cn')
app.setAsDefaultProtocolClient("print-yzhkj-cn")

const gotTheLock = app.requestSingleInstanceLock();

// 开机自启动
const appLaunchAuto = new AutoLaunch({
    name: app.getName(),
    path: process.execPath, // 确保是当前用户目录的 exe
    isHidden: true
});


// 自定义任务栏
app.setUserTasks([])

// initialization and is ready to create browser windows.
// Some APIs can only be used after this event occurs.
app.whenReady().then(() => {
    try {
        useHelper.initFile()
        log('初始化配置完成！')
        // 初始化数据库表
        useSqlite.initDatabase()
        log('初始化数据库完成！')
    } catch (e) {
        log('初始化配置失败！' + e.message)
        app.quit()
    }
    if (!gotTheLock) {
        showNotification("系统提示!", "窗口已存在！")
        app.quit()
    } else {
        // 创建窗口
        try {

            global.MAIN_WINDOW = createMainWindow()
            // 启动http服务
            useHttpApp.start()
            // 启动守护进程
            startGuardProcess()
            log('守护进程启动完成！')
            // 开机自启
            initAutoLaunch().catch((error) => {
                log('开机自启动初始化失败: ' + error.message)
                console.warn('Auto-launch initialization failed:', error)
            })
            log("getLoginItemSettings" + JSON.stringify(app.getLoginItemSettings()))

        } catch (e) {
            showNotification('启动服务提醒！', '启动本地端口服务服务失败！' + e)
            log('启动本地端口服务服务失败！' + e)
            app.quit()
            return
        }
    }
})


app.on('activate', function () {
    // 如果窗口不存在且没有获取到锁，创建窗口
    if (BrowserWindow.getAllWindows().length === 0 && !gotTheLock) {
        global.MAIN_WINDOW = createMainWindow()
    }
})


// 当所有窗口关闭时
app.on('window-all-closed', function () {
    // 如果不是macOS，退出应用
    if (process.platform !== 'darwin') {
        stopExternalProcess()
        app.quit()
    }
})

// 在退出应用前停止串口程序
app.on('before-quit', () => {
    stopExternalProcess()
})

app.on('quit', () => {
    stopExternalProcess()
})


// 正式 环境 隐藏 菜单
if (useHelper.APP_DEBUG === false) {
    Menu.setApplicationMenu(null)
}
//  开机启动
async function initAutoLaunch() {
    try {
        if (app.isPackaged) {
            if(useHelper.store.get('autoLaunch') === 'enabled'){
                appLaunchAuto.enable().catch(err => {
                    console.error('Auto-launch enable failed:', err);
                });
            } else {
                appLaunchAuto.disable().catch(err => {
                    console.error('Auto-launch disable failed:', err);
                });
            }
        }
        appLaunchAuto.isEnabled().catch(err => {
            console.error('Auto-launch isEnabled failed:', err);
            log('检查开机自启动状态失败: ' + err.message)
        }).then(enabled => {
            console.log("appLaunchAuto.isEnabled", enabled)
            log('检查开机自启动状态成功: ' + enabled)
        });
    } catch (error) {
        log('初始化开机自启动功能失败: ' + error.message)
    }
}


// 守护进程
function startGuardProcess() {
    console.log("taskConfig.isOpen", taskConfig.isOpen)
    setInterval(() => {
        if (taskConfig.isOpen) {
            startTask();
        } else {
            stopTask();
        }
    }, 1000);
}

// 停止串口程序
function stopExternalProcess() {

}

